package com.github.prontera.domain;

import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.github.prontera.domain.enums.TaskTypeEnum;
import com.github.prontera.model.BasicDomain;
import com.github.prontera.util.converter.jackson.OffsetDateTimeToIso8601Serializer;

import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
 * 
 * t_task-任务
 *
 */
@ToString
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"}, ignoreUnknown = true)
public class Task extends BasicDomain{

	private static final long serialVersionUID = 1L;
    
	/**
	 * 任务标题
	 */
	@ApiModelProperty(value = "任务标题")
    private String title;
	/**
	 * 奖励金方式 , 0:唐豆,1:唐钻，2：元
	 */
	@ApiModelProperty(value = "奖励金方式 , 0:唐豆,1:唐钻，2：元")
    private Integer depositAmountType;
	/**
	 * 任务保证金
	 */
	@ApiModelProperty(value = "任务保证金")
    private BigDecimal depositAmount;
	/**
	 * 如无图标
	 */
	@ApiModelProperty(value = "如无图标")
    private String image;
	/**
	 * 最大天数
	 */
	@ApiModelProperty(value = "最大天数")
    private Integer maxDay;
	/**
	 * 任务开始时间
	 */
	@ApiModelProperty(value = "任务开始时间")
	 @JsonSerialize(using = OffsetDateTimeToIso8601Serializer.class)
    private OffsetDateTime startTime;
	/**
	 * 任务结束时间
	 */
	@ApiModelProperty(value = "任务结束时间")
	 @JsonSerialize(using = OffsetDateTimeToIso8601Serializer.class)
    private OffsetDateTime endTime;
	/**
	 * 计划份数
	 */
	@ApiModelProperty(value = "计划份数")
    private Integer applicantsNumber;
	/**
	 * 份数
	 */
	@ApiModelProperty(value = "份数")
    private Integer actualNumber;
	/**
	 * 已经报名人数
	 */
	@ApiModelProperty(value = "已经报名人数")
    private Integer signedNumber;
	/**
	 * 完成度  
	 */
	@ApiModelProperty(value = "完成度  ")
    private Double completeRate;
	/**
	 * 奖励金方式 , 0:唐豆,1:唐钻，2：元
	 */
	@ApiModelProperty(value = "奖励金方式 , 0:唐豆,1:唐钻，2：元")
    private Integer rewardBaseSalaryType;
	/**
	 * 工资
	 */
	@ApiModelProperty(value = "工资")
    private BigDecimal rewardBaseSalary;
	/**
	 * 奖励金方式 , 0:唐豆,1:唐钻，2：元
	 */
	@ApiModelProperty(value = "奖励金方式 , 0:唐豆,1:唐钻，2：元")
    private Integer rewardType;
	/**
	 * 奖励金
	 */
	@ApiModelProperty(value = "奖励金")
    private BigDecimal rewardNumber;
	/**
	 * 任务描述
	 */
	@ApiModelProperty(value = "任务描述")
    private String summary;
	/**
	 * 任务要求类型  参看文档数字编号
	 */
	@ApiModelProperty(value = "任务要求类型  参看文档数字编号")
    private String claimTypes;
	
	
	private TaskTypeEnum claimType;
	/**
	 * 任务要求类型 -对应的值
	 */
	@ApiModelProperty(value = "任务要求类型 -对应的值")
    private String claimValues;
	/**
	 * 任务要求
	 */
	@ApiModelProperty(value = "任务要求")
    private String claim;
	/**
	 * 任务规则
	 */
	@ApiModelProperty(value = "任务规则")
    private String rule;
	/**
	 * 0-正常  1-删除
	 */
	@ApiModelProperty(value = "0-正常  1-删除")
    private Integer status;
	/**
	 * 0:未开始,1:进行中,2:正常结束
	 */
	@ApiModelProperty(value = "0:未开始,1:进行中,2:正常结束")
    private Integer taskStatus;
	/**
	 * 0:达人专享   1:兼职任务  2:全职任务
	 */
	@ApiModelProperty(value = "0:达人专享   1:兼职任务  2:全职任务")
    private Integer type;
	/**
	 * 0-显示   1-隐藏
	 */
	@ApiModelProperty(value = "0-显示   1-隐藏")
    private Integer display;

    /**
     * 客户领取得任务统计
     */
	private ClientTaskCount clientTaskCount;
	/**
     * 客户领取得任
     */
	private ClientTask clientTask;
	
	private Map<Integer,String> taskRemark;
	/**
	 * 任务领取时间
	 */
	@ApiModelProperty(value = "任务领取时间")
	 @JsonSerialize(using = OffsetDateTimeToIso8601Serializer.class)
    private OffsetDateTime obtainTime;
	private String orderNo;
    
    public Task(){
    
    }
    
    public TaskTypeEnum getClaimType() {
		return claimType;
	}

	public void setClaimType(TaskTypeEnum claimType) {
		this.claimType = claimType;
	}

    public Integer getTaskStatus() {
		return taskStatus;
	}

	public void setTaskStatus(Integer taskStatus) {
		this.taskStatus = taskStatus;
	}

	public String getOrderNo() {
		return orderNo;
	}

	public void setOrderNo(String orderNo) {
		this.orderNo = orderNo;
	}

	public OffsetDateTime getObtainTime() {
		return obtainTime;
	}

	public void setObtainTime(OffsetDateTime obtainTime) {
		this.obtainTime = obtainTime;
	}

	public ClientTaskCount getClientTaskCount() {
		return clientTaskCount;
	}

	public void setClientTaskCount(ClientTaskCount clientTaskCount) {
		this.clientTaskCount = clientTaskCount;
	}

	public ClientTask getClientTask() {
		return clientTask;
	}

	public void setClientTask(ClientTask clientTask) {
		this.clientTask = clientTask;
	}

	public Map<Integer,String> getTaskRemark() {
		return taskRemark;
	}

	public void setTaskRemark(Map<Integer,String> taskRemark) {
		this.taskRemark = taskRemark;
	}

	public String getTitle() {
        return this.title;
    }
    
    public void setTitle(String title) {
        this.title = title;
    }
    public Integer getDepositAmountType() {
        return this.depositAmountType;
    }
    
    public void setDepositAmountType(Integer depositAmountType) {
        this.depositAmountType = depositAmountType;
    }
    public BigDecimal getDepositAmount() {
        return this.depositAmount;
    }
    
    public void setDepositAmount(BigDecimal depositAmount) {
        this.depositAmount = depositAmount;
    }
    public String getImage() {
        return this.image;
    }
    
    public void setImage(String image) {
        this.image = image;
    }
    public Integer getMaxDay() {
        return this.maxDay;
    }
    
    public void setMaxDay(Integer maxDay) {
        this.maxDay = maxDay;
    }
    public OffsetDateTime getStartTime() {
        return this.startTime;
    }
    
    public void setStartTime(OffsetDateTime startTime) {
        this.startTime = startTime;
    }
    public OffsetDateTime getEndTime() {
        return this.endTime;
    }
    
    public void setEndTime(OffsetDateTime endTime) {
        this.endTime = endTime;
    }
    public Integer getApplicantsNumber() {
        return this.applicantsNumber;
    }
    
    public void setApplicantsNumber(Integer applicantsNumber) {
        this.applicantsNumber = applicantsNumber;
    }
    public Integer getActualNumber() {
        return this.actualNumber;
    }
    
    public void setActualNumber(Integer actualNumber) {
        this.actualNumber = actualNumber;
    }
    public Integer getSignedNumber() {
        return this.signedNumber;
    }
    
    public void setSignedNumber(Integer signedNumber) {
        this.signedNumber = signedNumber;
    }
    public Double getCompleteRate() {
        return this.completeRate;
    }
    
    public void setCompleteRate(Double completeRate) {
        this.completeRate = completeRate;
    }
    public Integer getRewardBaseSalaryType() {
        return this.rewardBaseSalaryType;
    }
    
    public void setRewardBaseSalaryType(Integer rewardBaseSalaryType) {
        this.rewardBaseSalaryType = rewardBaseSalaryType;
    }
    public BigDecimal getRewardBaseSalary() {
        return this.rewardBaseSalary;
    }
    
    public void setRewardBaseSalary(BigDecimal rewardBaseSalary) {
        this.rewardBaseSalary = rewardBaseSalary;
    }
    public Integer getRewardType() {
        return this.rewardType;
    }
    
    public void setRewardType(Integer rewardType) {
        this.rewardType = rewardType;
    }
    public BigDecimal getRewardNumber() {
        return this.rewardNumber;
    }
    
    public void setRewardNumber(BigDecimal rewardNumber) {
        this.rewardNumber = rewardNumber;
    }
    public String getSummary() {
        return this.summary;
    }
    
    public void setSummary(String summary) {
        this.summary = summary;
    }
    public String getClaimTypes() {
        return this.claimTypes;
    }
    
    public void setClaimTypes(String claimTypes) {
        this.claimTypes = claimTypes;
    }
    public String getClaimValues() {
        return this.claimValues;
    }
    
    public void setClaimValues(String claimValues) {
        this.claimValues = claimValues;
    }
    public String getClaim() {
        return this.claim;
    }
    
    public void setClaim(String claim) {
        this.claim = claim;
    }
    public String getRule() {
        return this.rule;
    }
    
    public void setRule(String rule) {
        this.rule = rule;
    }
    public Integer getStatus() {
        return this.status;
    }
    
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Integer getType() {
        return this.type;
    }
    
    public void setType(Integer type) {
        this.type = type;
    }
    public Integer getDisplay() {
        return this.display;
    }
    
    public void setDisplay(Integer display) {
        this.display = display;
    }
    
}
